postgresql - postgresql 10 이상 파티셔닝 파티션 partitioning, 설정... 대용량 테이블 데이터 쪼개기, 분리하기...
이 름 : 바다아이
|
조회수 : 9255
짧은 주소 : https://www.bada-ie.com/su/?631591801495
아래는 postgresql 10 이상 버전에서 파티셔닝 방법입니다.
10 부터 파티셔닝 부분이 정말 편해졌습니다. 예전에는 함수 만들어서 트리거 하고 그랬는데 이제 자체로 지원합니다.
대부분 날짜 별로 분류해 놓기 때문에 날짜 기준으로 설명합니다. 날짜가 아니라도 숫자로 해도 됩니다.
파티셔닝이 뭐냐? 물으면
한 테이블에 들어갈 엄청나게 많은 자료를 조건을 걸어서 여러 테이블로 쪼개서 넣게 만드는 겁니다.
이러면 테이블이 가벼워지겠죠....
만드실 때는 꼭 조건에 맞는 하위 파티션 테이블을 꼭 잘 만들어 놓아야 합니다.
자료를 입력해 보면 알겠지만 조건에 맞는 하위 파티션 테이블이 없으면 에러가 납니다.
있으면 해당 조건에 맞는 하위 파티션 테이블로 들어가고요....
간단히 설명해 놓습니다. 아래 정도만 알아도 응용해서 할 수 있을 겁니다.
쉽게 말해 핵심은 메인 파티션 테이블 껍데기를 놓고 실제 데이터는 하위 파티션으로 넣게 된다고 보시면 됩니다.
구조는 그렇게 이해하시면 편합니다.
아래처럼 계속 하위 파티션에 또 파티셔닝을 걸고 또 그 하위에 하위를 만드는 것도 가능합니다.
그러나 이건 개인적으로 권하지 않습니다.
CREATETABLE aaa_2006 PARTITIONOF aaa FORVALUESFROM ('2006-01-01') TO ('2006-12-31') PARTITIONBYRANGE (num);
CREATETABLE aaa_2006_1 PARTITIONOF aaa_2006 FORVALUESFROM ('1') TO ('100');
주의 :
기존 테이블을 파티션용 테이블로 전환은 안됩니다... 또한 파티션된 테이블 역시 일반 테이블로 전환되지 않습니다.
다만 필드 조건에 맞는 일반 테이블을 하위 파티션 테이블로 붙일 수는 있습니다.
또한 하위 파티션 테이블을 일반 테이블로 분리는 가능합니다.
참고 해서..... 기존 테이블을 적용하려면... 새로 만들고 복사하는 게 좋겠죠..
그래도 나는 기존 꺼로 하고 싶다 하시는 분들은 예전 함수, 트리거 방식으로 파티셔닝을 구현하셔야 합니다.
파티션 테이블을 만듭니다.CREATETABLE aaa (
numintnotnull,
logdate datenotnull
) PARTITIONBYRANGE (logdate);
연결 할 하위 파티션 테이블을 생성합니다.CREATETABLE aaa_2006 PARTITIONOF aaa FORVALUESFROM ('2006-01-01') TO ('2006-12-31');
CREATETABLE aaa_2007 PARTITIONOF aaa FORVALUESFROM ('2007-01-01') TO ('2007-12-31');
CREATETABLE aaa_2008 PARTITIONOF aaa FORVALUESFROM ('2008-01-01') TO ('2008-12-31');
인덱스도 생성합니다.CREATEINDEXON aaa_2006 (logdate);
CREATEINDEXON aaa_2007 (logdate);
CREATEINDEXON aaa_2008 (logdate);
데이터를 입력해 봅시다. 넣어보면 3개 하위 파티션에 조건에 맞게 들어가 있을 겁니다.insertinto aaa (num, logdate) values ('1', '2006-01-01');
insertinto aaa (num, logdate) values ('2', '2007-01-01');
insertinto aaa (num, logdate) values ('3', '2008-01-01');
잘 입력 되었나 확인해 보면...select * from aaa;
num | logdate
-----+------------
1 | 2006-01-01
2 | 2007-01-01
3 | 2008-01-01
(3개 행)
select * from aaa_2006;
num | logdate
-----+------------
1 | 2006-01-01
(1개 행)
select * from aaa_2007;
num | logdate
-----+------------
2 | 2007-01-01
(1개 행)
select * from aaa_2008;
num | logdate
-----+------------
3 | 2008-01-01
(1개 행)
파티션 관련 테이블 삭제시에는.... DROPTABLE aaa_2006;
자료를 보존하면서 하위 파티션을 분리 하려면 아래처럼 하세요.... 일반 테이블로 빠지게 됩니다.ALTERTABLE aaa DETACH PARTITION aaa_2006;
자료를 보존하면서 일반 테이블을 하위 파티션 테이블로 다시 추가 할 때...ALTERTABLE aaa ATTACH PARTITION aaa_2006 FORVALUESFROM ('2006-01-01') TO ('2006-12-31');
만약 하위 파티션을 데리고 있는 테이블을 삭제하면 관련 하위 파티션 테이블도 전부 삭제 됩니다.
!! 주의 하세요 !!DROPTABLE aaa;
|
|
번 호
카테고리
제 목
이름
조회수
Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL + Mariadb ]
서버위치 : 오라클 클라우드 춘천 실행시간 : 0.06386 초 to webmaster... gogo sea. gogo sea.